﻿using Black.NBT;
using System.Globalization;
using System.Windows;

namespace BlackNBT.ClientTest
{
    /// <summary>
    /// Formulaire de modification d'un Double
    /// </summary>
    public partial class EditDouble : Window, IDataEditWindows
    {
        #region Propriétés

        /// <summary>
        /// Obtient ou définit la donnée saisie
        /// </summary>
        public TagDouble Data
        {
            get;
            set;
        }

        #endregion

        #region Constructeur

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        public EditDouble()
        {
            this.InitializeComponent();
        }

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        /// <param name="data">Donnée a modifier</param>
        public EditDouble(TagDouble data)
        {
            this.InitializeComponent();
            this.Data = data;
            this.Title.Text = "Modify Entry";
            this.ItemName.Text = data.Name;
            this.ItemValue.Text = data.Value.ToString();
        }

        #endregion

        #region Fonctions publiques

        /// <summary>
        /// Récupère le tag
        /// </summary>
        /// <returns>Instance du tag</returns>
        public Tag GetTag()
        {
            return ((Tag)this.Data);
        }

        #endregion

        #region Fonctions privées

        /// <summary>
        /// Se produit sur le bouton Cancel
        /// </summary>
        /// <param name="sender">Source de l'appel</param>
        /// <param name="e">Argument de l'appel</param>
        private void OnCancelClick(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
            this.Close();
        }

        /// <summary>
        /// Se produit sur le bouton Save
        /// </summary>
        /// <param name="sender">Source de l'appel</param>
        /// <param name="e">Argument de l'appel</param>
        private void OnSaveClick(object sender, RoutedEventArgs e)
        {
            double value;

            // Vérification du nom

            if (string.IsNullOrWhiteSpace(this.ItemName.Text))
            {
                MessageBox.Show("You must enter a name.", "Data Verification", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            // Vérification de la valeur

            if (!double.TryParse(this.ItemValue.Text, NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out value))
            {
                MessageBox.Show("You enter an incorrect value.", "Data Verification", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            // Modification

            if (this.Data == null)
                this.Data = new TagDouble(string.Empty);

            // Affectation des données

            this.Data.Name = this.ItemName.Text;
            this.Data.Value = value;

            // On ferme la fenêtre

            this.DialogResult = true;
            this.Close();
        }

        #endregion
    }
}
